<?php

class ResponsableController extends Zend_Controller_Action
{

    public function init(){
        X\Permiso::paraController();
        $this->em = Zend_Registry::getInstance()->entitymanager;

    }

    public function indexAction(){
        X\Permiso::paraAction('Asociar.Horario');
        $facultades = $this->em->createQueryBuilder()
                               ->select    ('f.idFacultad')
                               ->addselect ('f.nombre')
                               ->from      ('Default_Model_Facultad', 'f')
                               ->orderBy   ('f.nombre', 'asc')
                               ->getQuery  ()
                               ->execute   ();

        $this->view->facultades = Zend_Json::encode(Array(
            "success" => true,
            "total"   => count($facultades),
            "rows"    => $facultades
        ));

        $carreras = $this->em->createQueryBuilder()
                              ->select    ('c.idCarrera')
                              ->addselect ('c.nombre')
                              ->addselect ('c.duracionHora')
                              ->from      ('Default_Model_Carrera', 'c')
                              ->orderBy   ('c.nombre', 'asc')
                              ->getQuery  ()
                              ->execute   ();

        $this->view->carreras = Zend_Json::encode(Array(
            "success" => true,
            "total"   => count($carreras),
            "rows"    => $carreras
        ));

        $categorias = $this->em->createQueryBuilder()
                              ->select    ('c.idCategoria')
                              ->addselect ('c.nombre')
                              ->from      ('Default_Model_Categoria', 'c')
                              ->orderBy   ('c.nombre', 'asc')
                              ->getQuery  ()
                              ->execute   ();

        $this->view->categorias = Zend_Json::encode(Array(
            "success" => true,
            "total"   => count($categorias),
            "rows"    => $categorias
        ));

        $qb = $this->em->createQueryBuilder();
        $profesores = $qb ->select    ('p.idProfesor')
                          ->addselect ('u.nombre')
                          ->addselect ('u.apellido')
                          ->from      ('Default_Model_Profesor', 'p')
                          ->join      ('p.usuario', 'u')
                          ->orderBy   ('u.apellido', 'asc')
                          ->getQuery  ()
                          ->execute   ();

        $this->view->profesores = Zend_Json::encode(Array(
            "success" => true,
            "total"   => count($profesores),
            "rows"    => $profesores
        ));

    }

    public function ajaxMateriasAction(){

        // Para traer las materias posibles segun la carrera y semestre
        $semestre = $this->_request->getPost('semestre');
        $carrera  = $this->_request->getPost('carrera');
        $semanho  = $this->_request->getPost('semestreanho');
        $seccion  = $this->_request->getPost('seccion');
        $anho     = $this->_request->getPost('anho');

        
        $materias = $this->em->createQueryBuilder()
                             ->select    ('c.idCurso')
                             ->addSelect ('cm.idCarreraMateria')
                             ->addSelect ('m.nombre')
                             ->from      ('Default_Model_Curso', 'c')
                             ->join      ('c.carreraMateria','cm')
                             ->join      ('cm.materia','m')
                             ->where     ("c.semestre='".$semestre."'")
                             ->andWhere  ("c.semestreAnho='".$semanho."'")
                             ->andWhere  ("c.seccion='".$seccion."'")
                             ->andWhere  ("c.anho='".$anho."'")
                             ->andWhere  ("cm.carrera='".$carrera."'")
                             ->orderBy   ('m.nombre', 'asc')
                             ->getQuery  ()
                             ->execute   ();

        if (count($materias)==0){
            X\Msg::Failure('No existen cursos en el periodo especificado.<br>Primero cargue un horario y luego asigne los responsables.');
        }
        else{
            echo Zend_Json::encode(Array(
                "success" => true,
                "total"   => count($materias),
                "rows"    => $materias
            ));
        }

    }

    public function ajaxCargarAction(){

        $responsables  = $this->_request->getPost('responsibles');

        $responsables = Zend_Json::decode($responsables);

        foreach($responsables as $resp){

            //Verificar que no exista el par (curso, profesor) antes de cargar
            //Esto tanto en la BD como en los datos traidos de la pagina
            //Tal vez haga falta un for de verificacion antes de este for de carga

            $curso     = $this->em->find('Default_Model_Curso', $resp['materia']);
            $categoria = $this->em->find('Default_Model_Categoria', $resp['categoria']);
            $profesor  = $this->em->find('Default_Model_Profesor', $resp['profesor']);

            if($resp['marca']==1){
                $marca=true;
            }else{
                $marca=false;
            }

            $responsable = new Default_Model_Responsable();

            $responsable->setCategoria($categoria);
            $responsable->setProfesor($profesor);
            $responsable->setMarca($marca);
            $this->em->persist($responsable);
            $curso->getResponsables()->add($responsable);
            $this->em->persist($curso);
        }
        $this->em->flush();

        X\Msg::Success('Los responsables se han asignado exitosamente.');

    }

}

